package com.example.common.mvi

/**
 * 网络请求结果封装类
 * 统一处理网络请求的三种状态：成功、失败、加载中
 */
sealed class NetworkResult<out T> { // 泛型密封类，T表示成功时返回的数据类型
    data class Success<T>(val data: T) : NetworkResult<T>() // 成功状态，包含返回的数据
    data class Error(val exception: Throwable) : NetworkResult<Nothing>() // 失败状态，包含异常信息
    object Loading : NetworkResult<Nothing>() // 加载中状态
}

/**
 * 扩展函数：处理成功结果
 * 当结果为Success时执行action函数
 */
inline fun <T> NetworkResult<T>.onSuccess(action: (T) -> Unit): NetworkResult<T> {
    if (this is NetworkResult.Success) { // 判断是否为成功状态
        action(data) // 执行传入的函数，参数为成功返回的数据
    }
    return this // 返回原始结果，支持链式调用
}

/**
 * 扩展函数：处理失败结果
 * 当结果为Error时执行action函数
 */
inline fun <T> NetworkResult<T>.onError(action: (Throwable) -> Unit): NetworkResult<T> {
    if (this is NetworkResult.Error) { // 判断是否为失败状态
        action(exception) // 执行传入的函数，参数为异常信息
    }
    return this // 返回原始结果，支持链式调用
}

/**
 * 扩展函数：处理加载中状态
 * 当结果为Loading时执行action函数
 */
inline fun <T> NetworkResult<T>.onLoading(action: () -> Unit): NetworkResult<T> {
    if (this is NetworkResult.Loading) { // 判断是否为加载中状态
        action() // 执行传入的函数
    }
    return this // 返回原始结果，支持链式调用
}